import type { Region } from './model';

import type { ID, IDS, PageQuery, PageResult } from '#/api/common';

import { commonExport } from '#/api/helper';
import { requestClient } from '#/api/request';

enum Api {
  regionExport = '/system/region/export',
  regionList = '/system/region/list',
  regionQueryByParentCode = '/system/region/queryByParentCode',
  regionTreeList = '/system/region/tree-list',
  root = '/system/region',
}

/**
 * 查询行政区划列表
 * @param params 请求参数
 * @returns 列表
 */
export function regionList(params?: PageQuery) {
  return requestClient.get<PageResult<Region>>(Api.regionList, { params });
}

/**
 * 导出行政区划列表
 * @param data 请求参数
 */
export function regionExport(data: Partial<Region>) {
  return commonExport(Api.regionExport, data);
}

/**
 * 获取行政区划详细信息
 * @param code 区划编号
 * @returns 行政区信息
 */
export function regionInfo(code: ID) {
  return requestClient.get<Region>(`${Api.root}/${code}`);
}

/**
 * 新增行政区划
 * @param data 参数
 */
export function regionAdd(data: Partial<Region>) {
  return requestClient.postWithMsg<void>(Api.root, data);
}

/**
 * 修改行政区划
 * @param data 参数
 */
export function regionUpdate(data: Partial<Region>) {
  return requestClient.putWithMsg<void>(Api.root, data);
}

/**
 * 删除行政区划
 * @param codes IDS 可批量删除
 * @returns void
 */
export function regionRemove(codes: IDS) {
  return requestClient.deleteWithMsg<void>(`${Api.root}/${codes}`);
}

/**
 * 查询行政区划树结构
 * @param params 请求参数
 */
export function regionTreeList(params?: { code?: ID; name?: string }) {
  return requestClient.get<Region[]>(Api.regionTreeList, { params });
}

/**
 * 根据父区划编号查询子区划列表
 * @param parentCode 父区划编号 默认传0
 */
export function regionQueryByParentCode(parentCode: ID = '0') {
  return requestClient.get<Region[]>(Api.regionQueryByParentCode, {
    params: { parentCode },
  });
}
